package com.vtech.ont.tdb.portal;

import org.apache.jena.query.Dataset;
import org.apache.jena.rdf.model.Model;

import java.util.List;

/**
 * <pre>
 * Jena TDB 操作入口
 * jena.tdb.location 与 jena.tdb.assembler-file <B>必须配置其中之一</B>
 * 若若二者都配置，默认使用 jena.tdb.location
 * <B>目前暂不支持基于 assembler-file 的访问╮(╯▽╰)╭</B>
 * <B>不是</B>基于 JDBC Driver 的操作
 * </pre>
 *
 * @author houzhiwei
 * @date 2017 /7/14 20:10
 * @since 1.0
 */
public interface TdbPortal {

    /**
     * Gets tdb dataset.
     *
     * @return the dataset
     */
    Dataset getDataset();

    /**
     * Load model int.
     *
     * @param modelUri   the model uri  | 本体入口（集成）文件的 URI
     * @param entryFile  path to the entrance ontology file | 本体入口（集成）文件
     * @param isOverride the is override
     * @return 1 if success, else throw exception
     */
    int loadModel(String modelUri, String entryFile, Boolean isOverride);


    /**
     * Load ont model int.
     *
     * @param modelUri   the model uri  | 本体入口（集成）文件的 URI
     * @param entryFile  path to the entrance ontology file | 本体入口（集成）文件
     * @param isOverride the is override
     * @return 1 if success, else throw exception
     */
    int loadOntModel(String modelUri, String entryFile, Boolean isOverride);


    /**
     * Gets default model.
     *
     * @return the default model
     */
    Model getDefaultModel();

    /**
     * Is model exists.
     *
     * @param modelUri the model uri  | 本体入口（集成）文件的 URI
     * @return the boolean
     */
    boolean isModelExists(String modelUri);

    /**
     * Is tdb empty.
     *
     * @return the boolean
     */
    boolean isTDBEmpty();

    /**
     * Gets model.
     *
     * @param modelUri the model uri  | 本体入口（集成）文件的 URI
     * @return the model
     */
    Model getNamedModel(String modelUri);

    /**
     * Load default model.
     *
     * @param entryFile path to the entrance ontology file | 本体入口（集成）文件
     */
    int loadDefaultModel(String entryFile);


    /**
     * Remove model.
     *
     * @param modelUri the model uri  | 本体入口（集成）文件的 URI
     */
    void removeModel(String modelUri);


    /**
     * List all models in tdb.
     *
     * @return the list
     */
    List<String> listModels();

    void close();
}
